Expectation MaxNum

VIJOS 情人节比赛
https://vijos.org/p/1919

这题是算数学期望题目,关键是怎么算的快,不能越界,不能丢精度,关于精度问题好像不是特别重要,关键是不越界。

一共m朵花,第i朵有i片花瓣,i=1…m, 一共随机n次,每次选一朵花,问这n次选到的一朵花花瓣数最大值的期望是多少。

典型数学题,先列公式,E=sum(i=1..m) i(i^n-(i-1)^n)/m^n, 直接计算出现指数,m n较大,显然不行,除非高精度,不过太费周折,
于是简化公式,把公式展开,带i的一坨变为 1
1^n-10^n+22^n-21^n+….mm^n-m(m-1)^n=mm^n-(1^n+…(m-1)^n)/m^n, 当时
还一直在想有没有1^n+..m^n的求和公式,结果发现特别复杂,看来不对,不过一看这个,已经可以计算了,因为每一项都可以除以分母了,是小数的指数次
于是直接列公式搞定。

估计有更直接的列公式的方法,可能可以直接到最后一步。

代码如下:

int main()
{
    int m, n;
    while(cin>>m>>n)
    {
        double sum=m;
        for(int i=1;i<m;i++)
        {
            sum-=pow(double(i)/m, n);
        }
        printf("%.4f\n", sum);
    }
    return 0;
}

这里面有一点组合数学的技巧,或者说对立事件,例如选择最大为i的次数,用1…i里面选n次,减去1..i-1里面选n次,这样剩下的就是至少选一次i片花瓣的次数了,

Posted by richard爱闹 - 2月 19 2015
如需转载,请注明: 本文来自 Richard